django 外键删除

您所在的位置:网站首页 django orm 删除 django 外键删除

django 外键删除

#django 外键删除| 来源: 网络整理| 查看: 265

1、CASCADE:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。

def index(res): user = User.objects.get(pk=2) user.delete() return '删除成功'

现在我们删除User表中的id为2的数据,结果外键关联的数据也被删除了:

2、PROTECT:受保护的。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。如果强制删除,会报错:

3、SET_NULL:设置为空。如果外键的那条数据被删除了,那么在本条数据上讲就将这个字段设置为空,如果设置这个选项,前提是要指定这个字段可以为空( null = True )

class Article(models.Model): author = models.ForeignKey('User', on_delete=models.SET_NULL, null=True)

4、SET_DEFAULT:设置默认值。如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。

如下:

如果我们删除外键关联的那条数据,那么author默认会把外键关联到User表中的id为2的数据中。

class User(models.Model): username = models.CharField(max_length=50) password = models.CharField(max_length=50) class Meta: db_table = 'User' class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey('User', on_delete=models.SET_DEFAULT, null=True, default=User.objects.get(pk=2)) class Meta: db_table = 'Article'

5、SET( ):如果外键的那条数据被删除了。那么将会获取SET函数中的值来作为这个外键的值。SET函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。

效果与SET_DEFAULT一样:

class User(models.Model): pass class Article(models.Model): author = models.ForeignKey('User', on_delete=models.SET(User.objects.get(pk=2)), null=True)

6、DO_NOTHIMG:不采取任何行为。一切全看数据库级别的约束。

以上这些选项只是Django级别的,数据级别依旧是RESTRICT(相当于 ORM 中的PROTECT) :

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3